home *** CD-ROM | disk | FTP | other *** search
/ PC Gamer (Italian) 45 / PC Gamer IT CD 45 2-2.iso / FLEET / data1.cab / Doctrines_Files / SubDef.txt < prev    next >
Text File  |  1999-07-22  |  9KB  |  355 lines

  1. TITLE SubDef
  2.  
  3. ; Timer 1 : Comms Intvl Surface Timer
  4. ; Timer 2 : Comms Intvl Submerge Timer
  5. ; Var 1      : Comms Intvl
  6. ; Var 2   : Running depth
  7. ; Var 3   : Speed limit storage
  8. ; Var 4   : Boolean that indicates sub hit last waypoint of user tactic
  9. ; Var 5   : integer value that indicates sub is prosecuting target automatically
  10. ; Var 6      : Boolean when 1 means we should stay at comms depth
  11. ; var 7   : integer value that indicates sub is avoiding a target automatically
  12. ; var 8      : indicates that user ordered us to come to comms depth
  13.  
  14. ;this timer8 = -1 should always be true - we always want 
  15. ;to execute this doctrine!
  16. RULE sub default tactic
  17. IF TIMER8 = -1 THEN
  18. ;DEBUG "executing sub default tactic!"
  19.  
  20. RULE Set up comms intvl
  21. IF INIT = 1 THEN
  22.     RULE Check Default Intvl Set
  23.     IF VAR1 = -1 OR VAR1 = 0 THEN
  24.         ; set default 2 hour comms intvl
  25.         DEBUG "Doctrine: Using default comms intvl"
  26.         VAR_SET 1 7200
  27.     END
  28.     DEBUG "Doctrine: Initializing all vars"
  29.     VAR_SET 2 -150
  30.     VAR_SET 3 0
  31.     VAR_SET 4 0
  32.     VAR_SET 5 0
  33.     VAR_SET 6 0
  34.     VAR_SET 7 0
  35.     VAR_SET 8 0
  36. END
  37.  
  38. RULE print out
  39. IF ORDER != NONE THEN
  40.    DEBUG "We have an order!"
  41.    DEBUG ORDER
  42. END
  43. ;we need to set to ent mode because var8 is an entity variable
  44. SETENTMODE
  45. RULE Set Tactic
  46. IF  ( ( NEWTRACK = 1 AND ORDER = NONE ) OR ORDER = ENGAGE ) AND VAR8 = 0 AND LOSTTRACK != 1 THEN
  47.     DEBUG "Got into order block!!!"
  48.     SETENTMODE
  49.     DEBUG "ORDER :"
  50.     DEBUG ORDER
  51.     ; if we have an order on a valid target, then lets submerge first
  52.     ; we check the class because if its an air contact and the air contact is far away,
  53.     ; we don't want to have to submerge...
  54.     RULE Resubmerge and Reset
  55.     IF VAR2 != O AND ( ORDER != NONE OR CLASS = SURF OR CLASS = SUB ) THEN
  56.         SETENTMODE
  57.         DEBUG "Doctrine: resubmerge for orders!"
  58.         DEBUG VAR2
  59.         RULE check var2
  60.         IF VAR2 > -100 THEN
  61.             VAR_SET 2 -150
  62.         END
  63.         DEBUG "ALT:"
  64.         DEBUG ALT
  65.         DEBUG "PERIDEPTH"
  66.         DEBUG PERIDEPTH
  67.         RULE resubmerge if needed
  68.         IF ALT > -100 OR ALT = -100 THEN
  69.             SETENTMODE
  70.             PRIORITY 255
  71.             PERSIST 0
  72.             RULE set depth
  73.             IF VAR2 != 0 THEN
  74.                 SETALT VAR2 ; restore stored depth
  75.             ELSE
  76.                 SETALT -150
  77.             END
  78.         END
  79.         VAR_SET 2 0     ; clear var2
  80.         SET_TIMER 1 -1  ; clear timer
  81.         SET_TIMER 2 -1
  82.         SENSOR Radar 0
  83.         VAR_SET 6 0
  84.     END
  85.     RULE reset timers if we have an order!
  86.     IF ORDER != NONE THEN
  87.         SETENTMODE
  88.         SET_TIMER 1 -1  ; clear timer
  89.         SET_TIMER 2 -1
  90.     END
  91.     ;if we have an air contact within 10 nmi we should go deep
  92.     RULE Avoid Air
  93.     IF ( CLASS = AIR OR CLASS = HELO ) AND ( RNG < 20000 ) THEN
  94.         SETSOLNMODE
  95.         RULE loading sub avoid doctrine for first time!
  96.         IF DOCTRINENAME != "SubAvoidAir" THEN
  97.             SETENTMODE
  98.             VAR_ADD 5 1
  99.             VAR_ADD 7 1
  100.         END
  101.         DEBUG "Doctrine: sub avoid air"
  102.         TACTIC SubAvoidAir
  103.     END
  104.     RULE Avoid Torp
  105.     IF CLASS = WEAP THEN
  106.         SETSOLNMODE
  107.         RULE loading sub avoid weapon doctrine for first time!
  108.         IF DOCTRINENAME != "SubAvoidWeap" THEN
  109.             SETENTMODE
  110.             VAR_ADD 5 1
  111.             VAR_ADD 7 1
  112.         END
  113.         DEBUG "Doctrine: sub avoid weapon"
  114.         ;EXPR {0,10} > 5
  115.         ;RULE fire back
  116.         ;IF CLASS = WEAP THEN
  117.         ;    DEBUG "Firing Back!"
  118.         ;    FIRE_BEST
  119.         ;END
  120.         TACTIC SubAvoidWeap
  121.     END
  122.     RULE Prosecute Surf
  123.     IF CLASS = SURF THEN
  124.         SETSOLNMODE
  125.         RULE loading surf attack doctrine for first time!
  126.         IF DOCTRINENAME != "SubAtkSurf" THEN
  127.             SETENTMODE
  128.             VAR_ADD 5 1
  129.         END
  130.         DEBUG "Doctrine: sub attack surf"
  131.         TACTIC SubAtkSurf
  132.     END
  133.     RULE Prosecute Sub
  134.     IF CLASS = SUB THEN
  135.         SETSOLNMODE
  136.         RULE loading sub attack doctrine for first time!
  137.         IF DOCTRINENAME != "SubAtkSub" THEN
  138.             SETENTMODE
  139.             VAR_ADD 5 1
  140.         END
  141.         DEBUG "Doctrine: sub attack sub"
  142.         DEBUG VAR5
  143.         DEBUG ALLIANCE
  144.         TACTIC SubAtkSub
  145.     END
  146.  
  147.     RULE unknown contact
  148.     IF CLASS != SUB AND CLASS != SURF AND CLASS != WEAP AND CLASS != AIR AND CLASS != HELO  THEN
  149.         DEBUG "Doctrine: unknown contact!"
  150.     END
  151. ELSE 
  152.     SETENTMODE
  153.     RULE lost track
  154.     IF LOSTTRACK = 1 THEN
  155.         DEBUG "Doctrine: Lost Track!"
  156.         SETENTMODE
  157.         VAR_SUB 5 1
  158.         ;check 5 and make sure its not below zero
  159.         RULE check var5
  160.         IF VAR5 < 0 THEN
  161.             SETENTMODE
  162.             VAR_SET 5 0
  163.         END
  164.         ;lets check the soln doctrine - if its avoidance then decrement avoidance var
  165.         SETSOLNMODE
  166.         RULE check avoid
  167.         IF DOCTRINENAME = "SubAvoidWeap" OR DOCTRINENAME = "SubAvoidAir" THEN
  168.             SETENTMODE
  169.             VAR_SUB 7 1
  170.         END
  171.         RULE check var7
  172.         IF VAR7 < 0 THEN
  173.             SETENTMODE
  174.             VAR_SET 7 0
  175.         END
  176.         ;finished auto command so lets set var2 = 0 so comms cycle can continue again
  177.         RULE reset var2
  178.         IF VAR5 = 0 THEN 
  179.             SETENTMODE
  180.             VAR_SET 2 0
  181.         END
  182.     END
  183.  
  184.     ; done transiting so turn off var8
  185.     RULE end transit order
  186.     IF ORDER = MOVE AND VAR4 = 1 THEN
  187.         SETENTMODE
  188.         VAR_SET 8 0
  189.         VAR_SET 2 0
  190.     END
  191.     
  192.     ;if we are not engaging someone or coming to comms depth
  193.     RULE start comms if no auto tactic
  194.     IF VAR5 = 0 OR VAR8 = 1 THEN
  195.         SETENTMODE
  196.         RULE execute comms sequence
  197.         ;lets make sure the user has not ordered our guy to do anything
  198.         ;if order is move and VAR4 = 1 then the sub just finished transiting,
  199.         ;so he should come to comms depth
  200.         IF ( ORDER = NONE OR ( ORDER = MOVE AND VAR4 = 1 ) OR VAR8 = 1 ) AND VAR6 = 0 THEN
  201.             ;sub has no orders so it can do comms sequence
  202.  
  203.             DEBUG "Doctrine: enter comms sequence"
  204.             SETENTMODE
  205.             ;sub just executed an order, so now we should set timer for next comms period
  206.             ;var2 = 0 when we finished executing an order
  207.             DEBUG "about to try to reset comms timer!"
  208.             DEBUG "VAR2 :"
  209.             DEBUG VAR2
  210.             RULE reset comms timer 
  211.             IF TIMER1 = -1 AND TIMER2 = -1 AND ALT < -100 AND VAR2 = O AND VAR8 = 0 THEN
  212.                 SETENTMODE
  213.                 DEBUG "Doctrine: reset comms timer"
  214.                 SET_TIMER 1 VAR1    ; set timer for next comms interval
  215.                 DEBUG "Doctrine: Here is var1"
  216.                 DEBUG VAR1
  217.                 DEBUG "Doctrine: setting var2"
  218.                 VAR_SET 2 ALT        ; store current alt
  219.             END
  220.  
  221.             RULE comms interval timer has just fired
  222.             IF TIMER1 = 0 THEN
  223.                 SETENTMODE
  224.                 DEBUG "Doctrine: Coming to comms depth"
  225.                 DEBUG "Doctrine: setting var2"
  226.                 DEBUG TIMER2
  227.                 VAR_SET 2 ALT        ; store current alt
  228.                 DEBUG VAR2
  229.                 RULE check speed
  230.                 IF SPD < 1 THEN
  231.                     SETENTMODE
  232.                     PERSIST 0
  233.                     PRIORITY 255
  234.                     SETSPD 3
  235.                 END
  236.                 PRIORITY 255
  237.                 PERSIST 0        ; prevent this rule from timing out
  238.                 SETALT PERIDEPTH    ; come to periscope depth
  239.             END
  240.  
  241.             RULE Rising to comms depth
  242.             IF TIMER1 = -1 AND TIMER2 = -1 AND VAR1 > 0 THEN
  243.                 ; we must be on our way to comms depth
  244.                 RULE reached comms depth?
  245.                 IF ALT > PERIDEPTH OR ALT = PERIDEPTH THEN
  246.                     DEBUG "Doctrine: Reached Comms Depth"
  247.                     SETENTMODE
  248.                     SET_TIMER 2 {300,600}    ; stay at comms depth 5-10 mins
  249.                 END
  250.             END
  251.  
  252.             RULE resubmerge timer has just fired
  253.             IF TIMER2 = 0 THEN
  254.                 SETENTMODE
  255.                 DEBUG "Doctrine: Resubmerging!"
  256.                 DEBUG VAR2
  257.                 PERSIST 0
  258.                 PRIORITY 255
  259.                 RULE check var2
  260.                 IF VAR2 != 0 THEN
  261.                     SETALT VAR2        ; restore stored depth
  262.                 ELSE
  263.                     SETALT -150 
  264.                     VAR_SET 2 -150
  265.                 END
  266.                 RULE set timer for resubmerge
  267.                 IF VAR2 < -100 THEN
  268.                     SETENTMODE
  269.                     SET_TIMER 1 VAR1    ; set timer for next comms interval
  270.                 END
  271.                 SENSOR Radar 0
  272.                 VAR_SET 8 0
  273.             END
  274.  
  275.             RULE Limit speed at PD
  276.             IF ALT > -70 AND SPD > 5 THEN
  277.                 SETENTMODE
  278.                 DEBUG "Doctrine: Limit Speed at PD!"
  279.                 RULE Store old speed
  280.                 IF VAR3 = 0 THEN
  281.                     SETENTMODE
  282.                     DEBUG "Storing speed in Var3"
  283.                     DEBUG SPD
  284.                     VAR_SET 3 SPD
  285.                 END
  286.                 PRIORITY 255
  287.                 SETSPD 5
  288.             END
  289.  
  290.             RULE Restore speed after submerge
  291.             IF ALT < -70 AND VAR3 != 0 THEN
  292.                 SETENTMODE
  293.                 DEBUG "Doctrine: Restore speed after submerge"
  294.                 PRIORITY 255
  295.                 SETSPD VAR3
  296.                 DEBUG VAR3
  297.                 VAR_SET 3 0
  298.             END
  299.  
  300.             DEBUG "Doctrine: Leave comms sequence"
  301.     
  302.         ELSE
  303.             SETENTMODE
  304.             ; we have an order, so lets submerge first
  305.             RULE Resubmerge for order
  306.             IF VAR2 != O AND ORDER != NONE THEN
  307.                 SETENTMODE
  308.                 DEBUG "Doctrine: resubmerge for orders 2!"
  309.                 DEBUG "VAR2"
  310.                 DEBUG VAR2
  311.                 PERSIST 0    
  312.                 RULE set resubmerge depth
  313.                 IF ORDER = SCRAM THEN
  314.                     SETENTMODE
  315.                     PERSIST 0
  316.                     PRIORITY 255
  317.                     MIN_ALT
  318.                 ELSE    
  319.                     SETENTMODE
  320.                     PERSIST 0
  321.                     PRIORITY 255    
  322.                     RULE set depth check var2
  323.                     IF VAR2 != 0 THEN
  324.                         SETALT VAR2        ; restore stored depth
  325.                     ELSE
  326.                         SETALT -150
  327.                     END
  328.                 END
  329.                 VAR_SET 2 0        ; clear var2
  330.                 SET_TIMER 1 -1
  331.                 SET_TIMER 2 -1
  332.                 SENSOR Radar 0
  333.                 VAR_SET 6 0
  334.                 VAR_SET 8 0
  335.             ELSE
  336.                 SETENTMODE
  337.                 ;this means VAR6 = 1 so we want to stay at comms depth
  338.                 RULE stay at comms depth
  339.                 DEBUG "Doctrine: stay at comms depth rule"
  340.                 IF ORDER = NONE THEN
  341.                     SETENTMODE
  342.                     PRIORITY 255
  343.                     PERSIST 0        ; prevent this rule from timing out
  344.                     SETALT PERIDEPTH    ; come to periscope depth
  345.                 END
  346.             END        ;if we have an order resubmerge
  347.         END            ;if should do comms depth sequence
  348.     ELSE
  349.         DEBUG "Doctrine: VAR5 IS NON-ZERO!"
  350.     END                ;if VAR5 =0
  351. END
  352.  
  353. END  ;sub default rule
  354.  
  355.